package com.superquan.selfstudybootmybatis.utils.singleton;

/**
 * @program: self-study-bootmybatis
 * @ClassName EnumPattern
 * @description: 枚举实现单例模式
 * @author: zwq
 **/
public class EnumPattern {
    //使用枚举实现单例模式优点：实现简单，枚举本身就是单例
    //由jvm从根本上提供保障！避免通过反射和反序列化的漏洞
    // 缺点没有延迟加载
    private static enum Pattern{//定义枚举
        INSTANCE;
        //枚举元素为单例
        private EnumPattern enumPattern;
        private Pattern(){
            System.out.println("枚举Pattern私有构造参数");
            enumPattern=new EnumPattern();
        }
        public EnumPattern getInstance(){
            return enumPattern;
        }
    }
    //getInstance方法：用于提供一种访问其唯一的对象的方式
    public static EnumPattern getInstance(){
        return  Pattern.INSTANCE.getInstance();
    }


    public static void main(String[] args) {
        EnumPattern ep1 = EnumPattern.getInstance();
        EnumPattern ep2 = EnumPattern.getInstance();
        //"=="比较的是引用，若未true则说明hp1和hp2是同一个实例
        if(ep1==ep2){
            System.out.println("EnumPattern使用了枚举单例模式，因此ep1和ep2是同一个实例");
        }
    }
}
